package com.tianji.common.domain.dto;

import lombok.Data;

import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

@Data
public class DelayedTask<T> implements Delayed {

        private T data;
        private long deadline;

        public DelayedTask(T data, int delaySecond){//当前时间是：10：00：00 过期时间是10秒
                                                         // deadline = 10：00：10
                this.data = data;
                this.deadline =  System.currentTimeMillis() + delaySecond*1000;
        }

        // 返回当前元素还剩多少有效时间
        @Override
        public long getDelay(TimeUnit unit) {
            long left = deadline - System.currentTimeMillis() ;  //现在时间是10：00：05， left = 5
            if(left < 0){                                        //现在时间是10：00：11， left = -1
                left = 0;
            }
            return left;
        }

        /**
         * 比较两个元素的剩余有效期，有效期短的优先出队
         * */
        @Override
        public int compareTo(Delayed o) {
            return (int)(this.deadline - ((DelayedTask)o).deadline);
        }

    }
